home *** CD-ROM | disk | FTP | other *** search
-
- /*
- $Id: mt_startup.c,v 1.6 1999/09/18 11:53:28 carlos Exp $.
- */
-
- #include "mt_includes.h"
- #include <clib/muitoolkit_protos.h>
-
-
- /*************************************************************
- *************************************************************/
-
- extern ULONG SAVEDS STDARGS L_OpenLibs(struct MuiToolkitBase *MuiToolkitBase);
- extern void SAVEDS STDARGS L_CloseLibs(void);
-
- struct MuiToolkitBase *SAVEDS ASM InitLib( REG(a6) struct ExecBase *sysbase, REG(a0) struct SegList *seglist, REG(d0) struct MuiToolkitBase *exb);
- struct MuiToolkitBase *SAVEDS ASM OpenLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase);
- struct SegList *SAVEDS ASM CloseLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase);
- struct SegList *SAVEDS ASM ExpungeLib( REG(a6) struct MuiToolkitBase *exb);
- ULONG ASM ExtFuncLib(void);
-
-
- /*************************************************************
- *************************************************************/
-
- LONG ASM LibStart(void)
- {
- return(-1);
- }
-
- /*************************************************************
- *************************************************************/
-
- extern APTR FuncTab [];
- extern DataTab;
-
- struct InitTable /* do not change */
- {
- ULONG LibBaseSize;
- APTR *FunctionTable;
- struct MyDataInit *DataTable;
- APTR InitLibTable;
- } InitTab =
- {
- (ULONG) sizeof(struct MuiToolkitBase),
- (APTR *) &FuncTab[0],
- (struct MyDataInit *) &DataTab,
- (APTR) InitLib
- };
-
- APTR FuncTab [] =
- {
- OpenLib,
- CloseLib,
- ExpungeLib,
- ExtFuncLib,
-
- // v1
-
- mt_Get,
- mt_ParseHotkey,
- mt_Label,
- mt_PopButton,
- mt_Checkmark,
- mt_Cycle,
- mt_CycleWeight,
- mt_Slider,
- mt_SliderFmt,
- mt_String,
- mt_StringSecret,
- mt_StringAccept,
- mt_StringReject,
- mt_Button,
- mt_ButtonWeight,
- mt_ButtonToggle,
- mt_WinOpen,
- mt_WinAttach,
- mt_WinDetach,
- mt_Text,
- mt_GetStringA,
- mt_GetIntegerA,
- mt_Radio,
- mt_Check,
-
- // done
-
- (APTR) ((LONG)-1)
- };
-
-
- extern struct MuiToolkitBase *MuiToolkitBase;
-
- /*************************************************************
- *************************************************************/
-
- struct MuiToolkitBase * SAVEDS ASM InitLib( REG(a6) struct ExecBase *sysbase,
- REG(a0) APTR seglist,
- REG(d0) struct MuiToolkitBase *exb)
- {
- MuiToolkitBase = exb;
-
- MuiToolkitBase->mt_SysBase = sysbase;
- MuiToolkitBase->mt_SegList = seglist;
-
- if( L_OpenLibs(MuiToolkitBase) )
- return( MuiToolkitBase );
-
- L_CloseLibs();
-
- {
- ULONG negsize, possize, fullsize;
- UBYTE *negptr = (UBYTE *) MuiToolkitBase;
-
- negsize = MuiToolkitBase->mt_LibNode.lib_NegSize;
- possize = MuiToolkitBase->mt_LibNode.lib_PosSize;
- fullsize = negsize + possize;
- negptr -= negsize;
-
- FreeMem(negptr, fullsize);
-
- }
-
- return(NULL);
- }
-
- /*************************************************************
- *************************************************************/
-
- struct MuiToolkitBase * __saveds ASM OpenLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase)
- {
- MuiToolkitBase->mt_LibNode.lib_OpenCnt++;
-
- MuiToolkitBase->mt_LibNode.lib_Flags &= ~LIBF_DELEXP;
-
- return(MuiToolkitBase);
- }
-
- /*************************************************************
- *************************************************************/
-
- struct SegList * SAVEDS ASM CloseLib( REG(a6) struct MuiToolkitBase *MuiToolkitBase)
- {
- MuiToolkitBase->mt_LibNode.lib_OpenCnt--;
-
- if(!MuiToolkitBase->mt_LibNode.lib_OpenCnt)
- {
- if(MuiToolkitBase->mt_LibNode.lib_Flags & LIBF_DELEXP)
- {
- return( ExpungeLib(MuiToolkitBase) );
- }
- }
-
- return(NULL);
- }
-
- /*************************************************************
- *************************************************************/
-
- struct SegList * SAVEDS ASM ExpungeLib( REG(a6) struct MuiToolkitBase *exb)
- {
- struct MuiToolkitBase *MuiToolkitBase = exb;
- struct SegList * seglist;
-
- if(!MuiToolkitBase->mt_LibNode.lib_OpenCnt)
- {
- ULONG negsize, possize, fullsize;
- UBYTE *negptr = (UBYTE *) MuiToolkitBase;
-
- seglist = MuiToolkitBase->mt_SegList;
-
- Remove((struct Node *)MuiToolkitBase);
-
- L_CloseLibs();
-
- negsize = MuiToolkitBase->mt_LibNode.lib_NegSize;
- possize = MuiToolkitBase->mt_LibNode.lib_PosSize;
- fullsize = negsize + possize;
- negptr -= negsize;
-
- FreeMem(negptr, fullsize);
-
- return(seglist);
- }
-
- MuiToolkitBase->mt_LibNode.lib_Flags |= LIBF_DELEXP;
-
- return(NULL);
- }
-
- /*************************************************************
- *************************************************************/
-
- ULONG ASM ExtFuncLib(void)
- {
- return(NULL);
- }
-
- struct MuiToolkitBase *MuiToolkitBase = NULL;
-
- /*************************************************************
- *************************************************************/
-
- #ifdef __SASC
-
- #ifdef ARK_OLD_STDIO_FIX
-
- ULONG XCEXIT = NULL; /* These symbols may be referenced by */
- ULONG _XCEXIT = NULL; /* some functions of sc.lib, but should */
- ULONG ONBREAK = NULL; /* never be used inside a shared library */
- ULONG _ONBREAK = NULL;
- ULONG base = NULL; /* Note, that XCEXIT/ONBREAK actually */
- ULONG _base = NULL; /* should have been defined as functions */
- ULONG ProgramName = NULL; /* and not as ULONGs... */
- ULONG _ProgramName = NULL;
- ULONG StackPtr = NULL;
- ULONG _StackPtr = NULL;
- ULONG oserr = NULL;
- ULONG _oserr = NULL;
- ULONG OSERR = NULL;
- ULONG _OSERR = NULL;
-
- #endif /* ARK_OLD_STDIO_FIX */
-
- void __regargs __chkabort(void) { } /* a shared library cannot be */
- void __regargs _CXBRK(void) { } /* CTRL-C aborted when doing I/O */
-
- #endif /* __SASC */
-